/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.editor.codecompletion;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.python.pydev.core.ICompletionState;
import org.python.pydev.core.IModule;
import org.python.pydev.core.TestDependent;
import org.python.pydev.core.structure.CompletionRecursionException;
import org.python.pydev.editor.codecompletion.revisited.AbstractASTManager;
import org.python.pydev.editor.codecompletion.revisited.CompletionCache;
import org.python.pydev.editor.codecompletion.revisited.CompletionStateFactory;
import org.python.pydev.editor.codecompletion.revisited.modules.AbstractModule;
import org.python.pydev.editor.codecompletion.revisited.modules.CompiledModule;
import org.python.pydev.editor.codecompletion.revisited.visitors.Definition;
import org.python.pydev.editor.codecompletion.shell.AbstractShell;
import org.python.pydev.editor.codecompletion.shell.IronpythonShell;
import org.python.pydev.editor.codecompletion.shell.PythonShellTest;
import com.aptana.shared_core.io.FileUtils;
public class IronpythonCompletionWithBuiltinsTest extends IronPythonCodeCompletionTestsBase {
public static void main(String[] args) {
try {
IronpythonCompletionWithBuiltinsTest builtins = new IronpythonCompletionWithBuiltinsTest();
builtins.setUp();
builtins.testCompleteImportBuiltin();
builtins.tearDown();
junit.textui.TestRunner.run(IronpythonCompletionWithBuiltinsTest.class);
System.out.println("Finished");
} catch (Exception e) {
e.printStackTrace();
}
}
private static IronpythonShell shell;
/*
* @see TestCase#setUp()
*/
public void setUp() throws Exception {
super.setUp();
codeCompletion = new PyCodeCompletion();
//we don't want to start it more than once
if (shell == null) {
shell = PythonShellTest.startIronpythonShell(nature);
}
AbstractShell.putServerShell(nature, AbstractShell.COMPLETION_SHELL, shell);
}
/*
* @see TestCase#tearDown()
*/
public void tearDown() throws Exception {
super.tearDown();
AbstractShell.putServerShell(nature, AbstractShell.COMPLETION_SHELL, null);
}
public void testRecursion() throws FileNotFoundException, Exception, CompletionRecursionException {
String file = TestDependent.TEST_PYSRC_LOC +
"testrec3/rec.py";
String strDoc = "RuntimeError.";
File f = new File(file);
ICompletionState state = CompletionStateFactory.getEmptyCompletionState("RuntimeError", nature,
new CompletionCache());
IModule module = AbstractASTManager.createModule(f, new Document(FileUtils.getFileContents(f)), nature);
try {
nature.getAstManager().getCompletionsForModule(module, state, true, true);
} catch (CompletionRecursionException e) {
//that's ok... we're asking for it here...
}
requestCompl(f, strDoc, strDoc.length(), -1, new String[] { "__doc__", "__getitem__()", "__init__()",
"__str__()" });
}
public void testCompleteImportBuiltin() throws BadLocationException, IOException, Exception {
String s;
s = "from datetime import datetime\n" +
"datetime.";
//for some reason, this is failing only when the module is specified...
File file = new File(TestDependent.TEST_PYDEV_PLUGIN_LOC +
"tests/pysrc/simpledatetimeimport.py");
assertTrue(file.exists());
assertTrue(file.isFile());
requestCompl(file, s, s.length(), -1, new String[] { "today()", "utcnow()" });
s = "from datetime import datetime, date, MINYEAR,";
requestCompl(s, s.length(), -1, new String[] { "date", "datetime", "MINYEAR", "MAXYEAR", "timedelta" });
s = "from datetime.datetime import ";
requestCompl(s, s.length(), -1, new String[] { "today", "now", "utcnow" });
// Problem here is that we do not evaluate correctly if
// met( ddd,
// fff,
// ccc )
//so, for now the test just checks that we do not get in any sort of
//look...
s = "" +
"class bla(object):pass\n" +
"\n" +
"def newFunc(): \n"
+
" callSomething( bla.__get#complete here... stack error \n" +
" keepGoing) \n";
//If we improve the parser to get the error above, uncomment line below to check it...
requestCompl(s, s.indexOf('#'), 1, new String[] { "__getattribute__(self, name: str)" });
//check for builtins..1
s = "" +
"\n" +
"";
requestCompl(s, s.length(), -1, new String[] { "RuntimeError" });
//check for builtins..2
s = "" +
"from testlib import *\n" +
"\n" +
"";
requestCompl(s, s.length(), -1, new String[] { "RuntimeError" });
//check for builtins..3 (builtins should not be available because it is an import request for completions)
requestCompl("from testlib.unittest import ", new String[] { "__file__", "__name__", "__init__", "__path__",
"__dict__", "anothertest", "AnotherTest", "GUITest", "guitestcase", "main", "relative", "t",
"TestCase", "testcase", "TestCaseAlias", });
}
public void testBuiltinsInNamespace() throws BadLocationException, IOException, Exception {
String s = "__builtins__.";
requestCompl(s, s.length(), -1, new String[] { "RuntimeError", "list" });
s = "__builtins__.list.";
requestCompl(s, s.length(), -1, new String[] { "sort(cmp: object, key: object, reverse: bool)" });
}
public void testBuiltinsInNamespace2() throws BadLocationException, IOException, Exception {
String s = "__builtins__.RuntimeError.";
requestCompl(s, s.length(), -1, new String[] { "__doc__", "__getitem__()", "__init__()", "__str__()" });
}
public void testDeepNested6() throws Exception {
String s;
s = "" +
"from extendable.nested2 import hub\n" +
"hub.c1.f.";
requestCompl(s, s.length(), -1, new String[] { "curdir" });
}
public void testDeepNested10() throws Exception {
String s;
s = "" +
"from extendable.nested3 import hub2\n" +
"hub2.c.a.";
requestCompl(s, s.length(), -1, new String[] { "fun()" });
}
public void testRelativeOnSameProj() throws Exception {
String s;
s = "" +
"import prefersrc\n" +
"prefersrc.";
AbstractModule.MODULE_NAME_WHEN_FILE_IS_UNDEFINED = "foo";
try {
requestCompl(s, s.length(), -1, new String[] { "OkGotHere" }, nature2);
} finally {
AbstractModule.MODULE_NAME_WHEN_FILE_IS_UNDEFINED = "";
}
}
public void testDeepNested7() throws Exception {
String s;
s = "" +
"from extendable.nested2 import hub\n" +
"hub.c1.f.curdir.";
requestCompl(s, s.length(), -1, new String[] { "upper()" });
}
public void testDeepNested8() throws Exception {
String s;
s = "" +
"from extendable.nested2 import hub\n" +
"hub.C1.f.sep."; //changed: was altsep (may be None in linux).
requestCompl(s, s.length(), -1, new String[] { "upper()" });
}
public void testDeepNested9() throws Exception {
String s;
s = "" +
"from extendable.nested2 import hub\n" +
"hub.C1.f.inexistant.";
requestCompl(s, s.length(), -1, new String[] {});
}
public void testDictAssign() throws Exception {
String s;
s = "" +
"a = {}\n" +
"a.";
requestCompl(s, s.length(), -1, new String[] { "keys()" });
}
public void testPreferSrc() throws BadLocationException, IOException, Exception {
String s = "" +
"import prefersrc\n" +
"prefersrc.";
requestCompl(s, s.length(), -1, new String[] { "PreferSrc" });
}
public void testCompleteImportBuiltinReference() throws BadLocationException, IOException, Exception {
String s;
s = "" +
"import os\n" +
" \n" +
"os.";
File file = new File(TestDependent.TEST_PYDEV_PLUGIN_LOC +
"tests/pysrc/simpleosimport.py");
assertTrue(file.exists());
assertTrue(file.isFile());
requestCompl(file, s, s.length(), -1, new String[] { "path" });
s = "" +
"import os\n" +
" \n" +
"os.";
requestCompl(s, s.length(), -1, new String[] { "path" });
//check for builtins with reference..3
s = "" +
"from testlib.unittest import anothertest\n" +
"anothertest.";
requestCompl(s, s.length(), 5, new String[] { "__file__", "__dict__", "__name__", "AnotherTest", "t" });
}
public void testInstanceCompletion() throws Exception {
String s = "class A:\n" +
" def __init__(self):\n" +
" self.list1 = []\n"
+
"if __name__ == '__main__':\n" +
" a = A()\n" +
" a.list1.";
// requestCompl(s, -1, new String[] {"pop(int index)", "remove(object value)"});
requestCompl(s, -1, new String[] { "pop(index: int)", "remove(value: object)" });
}
public void test__all__() throws Exception {
String s = "from extendable.all_check import *\n" +
"";
//should keep the variables from the __builtins__ in this module
requestCompl(s, -1, new String[] { "ThisGoes", "RuntimeError" });
}
public void testSortParamsCorrect() throws Exception {
String s = "[].sort" +
"";
//should keep the variables from the __builtins__ in this module
ICompletionProposal[] requestCompl = requestCompl(s, -1,
new String[] { "sort(cmp: object, key: object, reverse: bool)" });
assertEquals(1, requestCompl.length);
IDocument doc = new Document(s);
requestCompl[0].apply(doc);
assertEquals("[].sort(object, object, bool)", doc.get());
}
public void testFindDefinition() throws Exception {
isInTestFindDefinition = true;
try {
CompiledModule mod = new CompiledModule("os", nature.getAstManager().getModulesManager());
Definition[] findDefinition = mod.findDefinition(
CompletionStateFactory.getEmptyCompletionState("walk", nature, new CompletionCache()), -1, -1,
nature);
assertEquals(1, findDefinition.length);
assertEquals("os", findDefinition[0].module.getName());
} finally {
isInTestFindDefinition = false;
}
}
}